package com.xxxtea.common;

import com.xxxtea.entity.Merchant;
import lombok.experimental.UtilityClass;

/**
 * 商家上下文工具类
 * 
 * 基于ThreadLocal实现的商家信息上下文，便于在多线程环境下安全地获取和设置当前商家信息。
 * 主要用于多租户场景下的数据隔离和业务处理。
 * 
 * @author badman
 * @since 1.0.0
 */
@UtilityClass
public class MerchantContext {
	/** 当前线程的商家信息 */
	private final ThreadLocal<Merchant> threadLocal = new InheritableThreadLocal<>();

	/**
	 * 获取当前线程的商家对象
	 * @return 商家对象
	 */
	public Merchant getMerchant() {
		return threadLocal.get();
	}

	/**
	 * 设置当前线程的商家对象
	 * @param merchant 商家对象
	 */
	public void setMerchant(Merchant merchant) {
		threadLocal.set(merchant);
	}

	/**
	 * 获取当前商家ID
	 * @return 商家ID，若无则返回null
	 */
	public Integer getId() {
		Merchant merchant = threadLocal.get();
		if (merchant == null) return null;
		return merchant.getId();
	}

	/**
	 * 移除当前线程的商家信息，防止内存泄漏
	 */
	public void remove() {
		threadLocal.remove();
	}
}